package com.vue;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JMenuBar;
import javax.swing.JPopupMenu;

import java.awt.Component;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JMenuItem;
import javax.swing.JMenu;

import com.metier.Parc;
import com.persistance.AccesData;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
 * Classe JForm principale dans laquel seront integre les Jpanel
 * 
 * @author b0dian
 * @version 1.0
 *
 */
public class FormStation extends JFrame {

	@SuppressWarnings("unused")
    private JPanel contentPane;
	private JMenuBar menuBar;
	private JMenu mnFichier;
	private JMenu mnStation;
	private JMenu mnBorne;
	private JMenuItem mntmQuitter;
	private JMenuItem mntmListesDeStations;
	private JMenuItem mntmListeBornePar;
	private JMenuItem mntmAjoutBorne;
	private JMenu mnTypesCharges;
	private JMenuItem mntmListesDeTypes;
	private static Parc unParc;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					FormStation frame = new FormStation();
					frame.setVisible(true);
					unParc = new Parc();
			        unParc.setLeParcBorne(AccesData.getStations());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public FormStation() {
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBounds(100, 100, 550, 400);
		this.setTitle("Affichage Bite Station");
		setJMenuBar(getMenuBar_1());
	}

	/**
	 * Create the menu
	 */
	private JMenuBar getMenuBar_1() {
		if (menuBar == null) {
			menuBar = new JMenuBar();
			menuBar.add(getMnFichier());
			menuBar.add(getMnStation());
			menuBar.add(getMnBorne());
			menuBar.add(getMnTypesCharges());
		}
		return menuBar;
	}

	private static void addPopup(Component component, final JPopupMenu popup) {
		component.addMouseListener(new MouseAdapter() {
			public void mousePressed(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}

			public void mouseReleased(MouseEvent e) {
				if (e.isPopupTrigger()) {
					showMenu(e);
				}
			}

			private void showMenu(MouseEvent e) {
				popup.show(e.getComponent(), e.getX(), e.getY());
			}
		});
	}

	/**
	 * Ajoute un item Fichier au menu
	 */
	private JMenu getMnFichier() {
		if (mnFichier == null) {
			mnFichier = new JMenu("Fichier");
			mnFichier.add(getMntmQuitter());
		}
		return mnFichier;
	}

	/**
	 * Ajoute un item Station au menu
	 */
	private JMenu getMnStation() {
		if (mnStation == null) {
			mnStation = new JMenu("Station");
			mnStation.add(getMntmListesDeStations());
		}
		return mnStation;
	}

	/**
	 * Ajoute un item Borne au menu
	 */
	private JMenu getMnBorne() {
		if (mnBorne == null) {
			mnBorne = new JMenu("Borne");
			mnBorne.add(getMntmListeBornePar());
			mnBorne.add(getMntmAjoutBorne());
		}
		return mnBorne;
	}

	/**
	 * Ajoute un sous item Quitter a l'item Fichier
	 */
	private JMenuItem getMntmQuitter() {
		if (mntmQuitter == null) {
			mntmQuitter = new JMenuItem("Quitter");
			mntmQuitter.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					Quitter();
				}
			});
		}
		return mntmQuitter;
	}

	/**
	 * Ajoute un sous item Listes de Stations a l'item Station
	 */
	private JMenuItem getMntmListesDeStations() {
		if (mntmListesDeStations == null) {
			mntmListesDeStations = new JMenuItem("Listes de Stations");
			mntmListesDeStations.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					ListeStation();
				}
			});
		}
		return mntmListesDeStations;
	}

	/**
	 * Ajoute un sous item Liste Borne Par Station a l'item Borne
	 */
	private JMenuItem getMntmListeBornePar() {
		if (mntmListeBornePar == null) {
			mntmListeBornePar = new JMenuItem("Liste Borne Par Station");
			mntmListeBornePar.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					ListeBorneParStation();
				}
			});
		}
		return mntmListeBornePar;
	}

	/**
	 * Ajoute un sous item Ajout Borne a l'item Borne
	 */
	private JMenuItem getMntmAjoutBorne() {
		if (mntmAjoutBorne == null) {
			mntmAjoutBorne = new JMenuItem("Ajout Borne");
			mntmAjoutBorne.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					AjoutBorne();
				}
			});
		}
		return mntmAjoutBorne;
	}

	/**
	 * Fonction quitter
	 */
	public void Quitter() {
		System.exit(0);
	}

	/**
	 * Fonction ListeStation qui renvoie le pannel ListeStation
	 */
	public void ListeStation() {
		this.setContentPane(new ListeStation(unParc));
		this.revalidate();
	}

	/**
	 * Fonction ListeBorneParStation qui renvoie le pannel BorneParStation
	 */
	public void ListeBorneParStation() {
		this.setContentPane(new BorneParStation());
		this.revalidate();
	}

	/**
	 * Fonction AjoutBorne qui renvoie le pannel AjoutBorne
	 */
	public void AjoutBorne() {
		this.setContentPane(new AjoutBorne());
		this.revalidate();
	}

	/**
	 * Fonction ListeTypeCharges qui renvoie le pannel ListeTypeCharges
	 */
	public void ListeTypeCharges() {
		this.setContentPane(new ListeTypeCharges());
		this.revalidate();
	}

	/**
	 * Ajoute un item Type de charge au menu
	 */
	private JMenu getMnTypesCharges() {
		if (mnTypesCharges == null) {
			mnTypesCharges = new JMenu("Types Charges");
			mnTypesCharges.add(getMntmListesDeTypes());
		}
		return mnTypesCharges;
	}

	/**
	 * Ajoute un sous item Listes de Types Charges a l'item Type de charge
	 */
	private JMenuItem getMntmListesDeTypes() {
		if (mntmListesDeTypes == null) {
			mntmListesDeTypes = new JMenuItem("Listes de Types Charges");
			mntmListesDeTypes.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					ListeTypeCharges();
				}
			});
		}
		return mntmListesDeTypes;
	}
}
